/*===========================================================
 Win32 Global API Hook - 3 Win32  α׷ (2)
===========================================================*/

Win32  ι° ðԴϴ. ׵  ٻ Ƽ,  ¸ øԵǾϴ. 
 ð 帰 ȣԾ࿡  Լ °    Բ 帧
 ⺻ Ǻб ݺ  Ǵ  ˾ƺڽϴ.  ¿  
  ֽ е鲲 ϴٴ  帮鼭 µϴ.

(  Ī ϰڽϴ.)

1. ν ȣԾ (Procedure Calling Convention)

ð ν(Լ)  · Ű ȯ ٷ,  ϴ°  
 ī . ׷   ü   ȣԾ࿡  ⸦ غ. 
ȣԾ(calling convention)̶ Ű Լ ϰ Լ    ϴ
  ü Ģ  з̴. ȣԾ࿡   ͵ ִ.

(1) __cdecl        : C ȣԾ
(2) __stdcall     : ǥ ȣԾ
(3) __fastcall    :  ȣԾ
(4) __declspec(naked)    : (?) ȣԾ
(5) this        : this ȣԾ

, ̰Ϳܿ __pascal ȣԾ ִµ Win32 Ѿ鼭 ̻  ʴ´. , ׷ 
 ˾ƺ. ϴ ڵ带 鼭   Ȯغ. (  Ű ֵ...)

(1) __cdecl    (C ȣԾ)

70:       ret = cdecl_Call(3, 4);
0040D588   push        4
0040D58A   push        3
0040D58C   call        @ILT+0(cdecl_Call) (00401005)
0040D591   add         esp,8
0040D594   mov         dword ptr [ebp-4],eax

츮 ̹ ð (?) ⿡   ڵ ׾߸ ΰ̴. Լ̸ 
  ʿ䵵  __cdecl  C ȣԾ Լ̴.  Ű ÿ ǪǴ 
 .  Ű Ųٷ ǪǴ    ִ. ׸ Լ ȣǰ  , ȣ
ʿ   ϴ°  Ȯ   ְڴ.

׷,  Լ  .

19:   // C ȣԾ
20:   int __cdecl cdecl_Call(int a, int b)
21:   {
00401040   push        ebp
00401041   mov         ebp,esp
00401043   sub         esp,40h
00401046   push        ebx
00401047   push        esi
00401048   push        edi
00401049   lea         edi,[ebp-40h]
0040104C   mov         ecx,10h
00401051   mov         eax,0CCCCCCCCh
00401056   rep stos    dword ptr [edi]
22:       return a+b;
00401058   mov         eax,dword ptr [ebp+8]
0040105B   add         eax,dword ptr [ebp+0Ch]
23:   }
0040105E   pop         edi
0040105F   pop         esi
00401060   pop         ebx
00401061   mov         esp,ebp
00401063   pop         ebp
00401064   ret

Լ 鼭("{") Լڵ Բ ó  0xCC(int 3)   򸮴° 
 ׸ΰ ˼ ִ. ¶ ߿Ѱ   ret ̴. ׳ ȯǴ°   ִ. 
ĸ Ʊ Լ ȣʿ  ֱ  ȣǴ Լ ׳ ϸ ϸȴ.

(2) __stdcall (ǥ ȣԾ)

72:       ret = stdcall_Call(3, 4);
0040D597   push        4
0040D599   push        3
0040D59B   call        @ILT+5(stdcall_Call) (0040100a)
0040D5A0   mov         dword ptr [ebp-4],eax

ϴ __stdcall ȣԾ  Ű ʿ  ÿ ǪѴ. ׷? Լȣ 
ǰ   ƱҴ  ڵ(add esp, 8) ִ°   ִ. ̰ɷ  ȣǴ 
Լο  Ѵٰ ̷   ִ.

25:   // ǥ ȣԾ
26:   int __stdcall stdcall_Call(int a, int b)
27:   {
00401070   push        ebp
00401071   mov         ebp,esp
00401073   sub         esp,40h
00401076   push        ebx
00401077   push        esi
00401078   push        edi
00401079   lea         edi,[ebp-40h]
0040107C   mov         ecx,10h
00401081   mov         eax,0CCCCCCCCh
00401086   rep stos    dword ptr [edi]
28:       return a+b;
00401088   mov         eax,dword ptr [ebp+8]
0040108B   add         eax,dword ptr [ebp+0Ch]
29:   }
0040108E   pop         edi
0040108F   pop         esi
00401090   pop         ebx
00401091   mov         esp,ebp
00401093   pop         ebp
00401094   ret         8

 Լ ϱ   ȯڵ(ret 8)  8Ʈ ø ϴ°   
ִ. "ret n"  nƮ ŭ esp  Ŀ ϴ  ̴. ׷, ⼭  ret 8 
 ǰ  esp() 󸶸ŭ ұ? 8Ʈ? ׷ ϸ  ڴ°. 
 12Ʈ(0xC)̴. ֳϸ ret  ÿ ּҸ µ װ (jmp)ϱ 
̴. (ð call ɰ Բ ϸ ߴ. ص, call ret  
 ּҸ  push, pop Ѵ.)

(3) __fastcall ( ȣԾ)

__fastcall ȣԾ ̸ ״  ȣ ؼ Ǿ. ޸𸮺   
͸ ̿Ѵٰ ؼ  ȣԾ(Register calling convention)̶ Ѵ. ׷ Win32 
ڸ忡 Ģ  ȣԾ  ʴ´.  VxD ¶  ǰ, 
VxD ý Լ  ȣԾ ϴ ͵  Ѵ. ׷ Windows NT/2000 Ŀ
 ̹ ̻  ȣԾ  ʴµ   ʹ CPU  
ü̱⶧ CPU ȣȯ   ⶧̴.

74:       ret = fastcall_Call(3, 4, 5, 6);
0040D5A3   push        6
0040D5A5   push        5
0040D5A7   mov         edx,4
0040D5AC   mov         ecx,3
0040D5B1   call        @ILT+35(fastcall_Call) (00401028)
0040D5B6   mov         dword ptr [ebp-4],eax

ȣϴ   Ǹ, ù° ι° Ű ecx, edx Ϳ Ƽ ȣϴ°   
. ׷   Ǿ Ƿ  Ű Ϳ  .  ó 
ΰ Ű ecx, edx    ϴµ ̶  ʿ  
ÿ Ǫϰ, __stdcall  ȣǴ Լʿ  Ѵ.

31:   //  ȣԾ
32:   int __fastcall fastcall_Call(int a, int b, int c, int d)
33:   {
004010A0   push        ebp
004010A1   mov         ebp,esp
004010A3   sub         esp,48h
004010A6   push        ebx
004010A7   push        esi
004010A8   push        edi
004010A9   push        ecx
004010AA   lea         edi,[ebp-48h]
004010AD   mov         ecx,12h
004010B2   mov         eax,0CCCCCCCCh
004010B7   rep stos    dword ptr [edi]
004010B9   pop         ecx
004010BA   mov         dword ptr [ebp-8],edx
004010BD   mov         dword ptr [ebp-4],ecx
34:       return a+b+c+d;
004010C0   mov         eax,dword ptr [ebp-4]
004010C3   add         eax,dword ptr [ebp-8]
004010C6   add         eax,dword ptr [ebp+8]
004010C9   add         eax,dword ptr [ebp+0Ch]
35:   }
004010CC   pop         edi
004010CD   pop         esi
004010CE   pop         ebx
004010CF   mov         esp,ebp
004010D1   pop         ebp
004010D2   ret         8

Լ ̴. ׷   ̻Ѱ ִ.  ȣ ؼ ͸ ؼ Ű 
Ѱشٰ ߴµ, Ű Ѿ ͸ ٽ  (ebp-) Ƽ ϴ° 
  ִ. ̰  ׸ Ǿ ε    ڵ  
.

00401020   lea         eax,[ecx+edx]
00401023   mov         edx,dword ptr [esp+4]
00401027   mov         ecx,dword ptr [esp+8]
0040102B   add         eax,edx
0040102D   add         eax,ecx
0040102F   ret         8

lea  ó° , lea    ̴ ̴ϱ  ˾Ƶ.
lea (Load Effective Address)
:  ǿ ּ(޸)  ǿ() Ѵ.  C ͺ 
ϴ 忡 ȴ.

ó ΰ Ű eax ecx ͷ ϰ  ʹ  ̿ϴ°   
.

(3) __declspec(naked) ((?) ȣԾ)

ؼ  ̻ѵ ǹ̻δ  ϴ  Լ  Լڵ Լ
ڵ带  ʴ ٴ ǹ̴. ׷Ƿ ̰ __cdecl · ؼ ϴ, __stdcall 
· ϴ װ   ̴. naked ȣԾ  ǹ̷δ ȣԾ̶ Ҽ 
, ֳĸ ̰ Լ ο Լ Ǵ   տ ȣԾó Լ 
  ƴϱ ̴. ¶ ڵ带 .

76:       ret = naked_Call(3, 4);
00401159   push        4
0040115B   push        3
0040115D   call        @ILT+25(naked_Call) (0040101e)
00401162   add         esp,8
00401165   mov         dword ptr [ebp-4],eax

Ű ǰͰ ϰ ʿ  ǪǸ, __cdecl   ȣ ʿ 
    ִ. ̰ naked ȣԾ̶ ׷ ƴϰ Ʈ ȣ Ͼ̴. 
 ߵ naked ȣԾ Լ ̴.

// (?) ȣԾ
__declspec(naked) int naked_Call(int a, int b)
{
    //return a+b;
    __asm 
    {
        push    ebp            // Լ ڵ
        mov        ebp, esp

        mov        eax, a
        add        eax, b

        mov        esp, ebp    // Լ ڵ
        pop        ebp
        ret
    }
}

𽺾 ڵ尡 ƴϰ ׳ C ڵ带 . ֳĸ ζξ ߱ ̴. ٽ
 Լڵ Լڵ带   ־ Ѵٴ    ִ.

(5) this : this ȣԾ

  ̸ ָѵ C++ this Ͱ  óǴ س Ծ̶ 
.  ڵ带 ,

78:       This_Call thiscall;
79:       ret = thiscall.Call(3, 4);
00401168   push        4
0040116A   push        3
0040116C   lea         ecx,[ebp-8]
0040116F   call        @ILT+10(This_Call::Call) (0040100f)
00401174   mov         dword ptr [ebp-4],eax

ٸ͵  ܺ µ, Լ call ϱ  ( Ǵ) ecx 
lea  εѵ callִ    ִ. ⼭ ecx Ͱ ٷ this ̴. Ŭ
 Լ θ C++ Ϸ ecx ͸ Ŭ νϽ ڽ Ű ͸  
 Ѵٴ ̴.  Լ ڱⰡ  𿡼 ȣǾ ϴ  θ ༮ 
 νϽ Ȯ   ִ. (  ecx ͸ ̿ؼ ִ 峭 غ 
ٵ, ð   ѹ ̰  غ ٶ.)


56:   // this ȣԾ
57:   class This_Call
58:   {
59:   public:
60:       int Call(int a, int b)
61:       {
004011C0   push        ebp
004011C1   mov         ebp,esp
004011C3   sub         esp,44h
004011C6   push        ebx
004011C7   push        esi
004011C8   push        edi
004011C9   push        ecx
004011CA   lea         edi,[ebp-44h]
004011CD   mov         ecx,11h
004011D2   mov         eax,0CCCCCCCCh
004011D7   rep stos    dword ptr [edi]
004011D9   pop         ecx
004011DA   mov         dword ptr [ebp-4],ecx
62:           return a+b;
004011DD   mov         eax,dword ptr [ebp+8]
004011E0   add         eax,dword ptr [ebp+0Ch]
63:       }
004011E3   pop         edi
004011E4   pop         esi
004011E5   pop         ebx
004011E6   mov         esp,ebp
004011E8   pop         ebp
004011E9   ret         8

δ   .  this Ͷ ˷ ecx ͸   εϴ° 
 ִµ ̰   ̱⶧  ڵϰ̶ ȴ. (ñϸ  Ȯغ
ñ...)

,  5 ȣԾ࿡ ؼ  ȣԾ   · Ǵ Ϻϰ 
Ŷ ϴ´.  ڸ  ټ Win32 API __stdcall  Ǿ ִ. 츮 
  WinMain() Լ  __stdcall ̴.
ũμƮ  Ȯ强 ؼ ǵ Ÿ(WORD, DWORD ) ϴ° ϴ
  ƶ Լ ȣԾ ǵ · ϴ° Ѵ. ׷ Win32 SDK  
 ȣԾ   ˾ƺ.

CDECL        __cdecl
WINAPI        __stdcall
APIENTRY    __stdcall
CALLBACK    __stdcall
PASCAL        __stdcall
WSAAPI        __stdcall
FASTCALL    __fastcall

CDECL  츮   CALLBACK, WINAPI ϴ ͵  __stdcall  óǴ°   
ִ. ( ڸ,   ʴ.  ȯ̳Ŀ  ణ ٸ ó Ǳ 
, Ϲ Win32ȯ濡 Ư Ű澲 ʴ  Ģ   ̴.) ,   
µ VC++ Ư Ͽɼ  ʴ Ʈ __cdecl ȣԾ Ѵ.

, ׷ ȣԾ࿡ ؼ  Ȯغ ̻ ǹ  ,  ̷  
ȣԾ ؾ ϴ ñ   𸣰ڴ. ϴ ũ __cdecl  __stdcall ȣ
Ծ Ŀٶ   𿡼  ̳ ̴. ڴ ȣϴ ʿ 
 ȣǴ Լο  ش.  ؼ ȣ޴ ʿ  ϴ 
__stdcall   ո̶  , __cdecl  ʿ   ִ.

xprintf 迭  Լ   ã  ִ. __stdcall Լ ڵ Լ Ű
 (Ȯ ϸ Ű ޴  ũ̴.) ˰ ִٴ Ͽ Լ ϱ⸦ 
ߴ. Լ 뼺 ȭ شȭϱ  ġٰ   ִµ, ̷   
ڸ   ٴ  ־. ϴ ڸ Ϸ ȣ޴ʿ  Ű
  𸣱  ȣ޴ʿ    ,  ȣϴʿ Ű
  ˰ ̾. ׷Ƿ 翬 ڸ ϴ Լ  ȣϴʿ 
־߸ ߰  __cdecl ȣԾ ʿϰ Ȱ̴. , ̷ ȣԾ࿡  з 
ٺ C   ׷ٴ ̴.  CPU  츮  ̿ϴ 
͸ ̿ϴ Լ ϴ ׳  帣µ α׷ Ǵ  . ׳ Ű´
  ̴.  ü  κ C Ǿ , 츮 ŷϷ API κ 
C Ǿ Ƿ C Լ  ϴ ߿Ѱ̴.

, ڱ µ  Լ ̸ δ(Ȯϰ ϸ Linkÿ) ٸ̸ ȯ
 Ǵµ __cdecl Լ պκп  ٰ __stdcall Լ պκп ٰ Ҿ 
 @ Ű ũ( ũ) ٴ´. ̰͸  __stdcall Լ Լΰ Ű
 ũ⸦ صξٴ    ִ. (Ȯ ؼ extern "C"  C Ÿ Լ
 ־߸ Ѵ. C++ (ε) ϱ  Լ ̸  ϰ 
   ȮϱⰡ  ʴ.)

2. 帧

帧  ߿  ǹ ݺ ؼ ˾ƺ. Ǹ ôϸ ôٵ  
 ݺ   𽺾ϰ ִ  ģ  !! (, Ư ? ^^)

(1) ǹ

67:       if(a > 3)
0040115F   cmp         dword ptr [ebp-4],3
00401163   jle         main+34h (00401174)
68:       {
69:           printf("3  ũ. !!\n");
00401165   push        offset string "3 \xba\xb8\xb4\xd9 \xc5\xa9\xb4\xd9. !!\n" (00422f84)
0040116A   call        printf (0040d780)
0040116F   add         esp,4
70:       }
71:       else
00401172   jmp         main+41h (00401181)
72:       {
73:           printf("3  ۰ų . !!\n");
00401174   push        offset string "3 \xba\xb8\xb4\xd9 \xc0\xdb\xb0\xc5\xb3\xaa \xb0\xb0\xb4
\xd9. !!\n" (0042
00401179   call        printf (0040d780)
0040117E   add         esp,4
74:       }

     ̴.

ǹ Ǵ  ɾ ſ     ϴ. ϴ cmp  
.  ϱ  a  3 ϴ° .  Ʒ jle  . ̸  
ӽ , ۰ų  (Jump if less or equal) Ű ʴ°? 츮  ״
. Ȯϰ ι°  ϰ ȴ. ׷ ׷ ʴٸ   , ٷ 3 ū츦 
ϴ ù°  ϰ ι°  ǳʶٰ ϰ ȴ.

, ü 帧 ذ ɰε  ü 캸. ܼ cmp ϳ   
, ū, Ǵ    ? ̰ ÷ Ͷ  ϸ ȴ. ÷ 
  ¸ ǥϱ  Ư  Եȴ.   cmp   ΰ  
ٸ ZR ÷(Ǵ ZF) 1 Ʈȴ. ̷ cmp test 񱳸 ÷ ͸ ̿ؼ 
  Ÿµ 츮 ̷ ÷׵  ϴ ġ ϰԵǴµ, ̷ 
  ٷ jxx 迭 ̴. 츮 ݱ jmp ɸ Ҵµ ̰  
 ̶ Ʒ Ʈ  ɵ ÷׵    νϰ ǿ 
 쿡 ϰ ȴ.

je (jump if equal)    : ٸ Ѵ. ( == )
jne (jump if not equal)    :  ʴٸ Ѵ. ( != )
jl (jump if less)    : ۴ٸ Ѵ. ( < )
jg (jump if greater): ũٸ Ѵ. ( > )
jge (jump if greater or equal)    : ũų ٸ Ѵ. ( >= )
jle (jump if less or equal)        : ۰ų ٸ Ѵ. ( <= )

,   ̴.  ũξ  캸 ˰Եǰ  
    ִ. ɾ e   z ٲ ٸɾε Ǵµ  
ǹ̴ ϴ.   je jz ϰ Ѵ. ǹ̴ jz zero flag  쿡 
ٶ ǹ 񱳰 ٸ zero flag Ǳ     Ѵ. (
 Ʈڵ带   ׷ ˼ ̴. ̷͵ ʺڵ鿡 ణ ȥ µ 
 Intel CPU Ŵ ũξ Ŵ ǥϴ ɾ ̳ ÷  ̸
 ణ ̰ ִ.   ǹε ̸ ݾ ٸ س  Ѵ.)

׷,  ɰ   𽺾 ڵ带 캸 ִ° ߰  ٵ, 
 ٷ 츮 ߴ ǰ ݴǴ  ˻ϰ бѴٴ ̴. 츮 3 ũٸ
 ˻ߴµ  𽺾 ڵ带  3 ۰ų ٸ ˻Ѵٴ ̴. ̰ 
 ڵ带 Ҷ  jmp  ʱؼ ȭ ϴ ̴.  
ݴ غ jmp  ι ؾ Ѵٴ°   ̴. ̰   
α׷Ҷ ⺻ ε 츮 ϴ  ݴ ˻ϴ  α׷  
  . jmp ġ ϴ  Ѵ밡 ġ ϴ ̱ ̴.

(2) ݺ

76:       for(int i=0; i<5; i++)
0040D7F1 C7 45 F8 00 00 00 00 mov         dword ptr [ebp-8],0
0040D7F8 EB 09                jmp         main+53h (0040d803)
0040D7FA 8B 45 F8             mov         eax,dword ptr [ebp-8]
0040D7FD 83 C0 01             add         eax,1
0040D800 89 45 F8             mov         dword ptr [ebp-8],eax
0040D803 83 7D F8 05          cmp         dword ptr [ebp-8],5
0040D807 7D 0B                jge         main+64h (0040d814)
77:       {
78:           a++;
0040D809 8B 4D FC             mov         ecx,dword ptr [ebp-4]
0040D80C 83 C1 01             add         ecx,1
0040D80F 89 4D FC             mov         dword ptr [ebp-4],ecx
79:       }
0040D812 EB E6                jmp         main+4Ah (0040d7fa)

C   Ǵ for()̴. ϴ  i  0 Ʈϰ ٷ ϴ 
 ִ. ? ٷ ǽ Ѵ. ǽ  5 i , ũų ٸ( ݴ
  ˻ϴ°   ִ.) ݺ ŻѴ. ݺ   a 1 ϰ, 
 i 1 ϴ  Ѵ. ׷ ٽ ǹ Ѵ.    
. ׷  while() .

76:       int i = 5;
0040D7F1 C7 45 F8 05 00 00 00 mov         dword ptr [ebp-8],5
77:       while(i--)
0040D7F8 8B 45 F8             mov         eax,dword ptr [ebp-8]
0040D7FB 8B 4D F8             mov         ecx,dword ptr [ebp-8]
0040D7FE 83 E9 01             sub         ecx,1
0040D801 89 4D F8             mov         dword ptr [ebp-8],ecx
0040D804 85 C0                test        eax,eax
0040D806 74 0B                je          main+63h (0040d813)
78:       {
79:           a++;
0040D808 8B 55 FC             mov         edx,dword ptr [ebp-4]
0040D80B 83 C2 01             add         edx,1
0040D80E 89 55 FC             mov         dword ptr [ebp-4],edx
80:       }
0040D811 EB E5                jmp         main+48h (0040d7f8)

 for() Ȱ  ϴ while()̴.      󰡺.

⼭ ϳ ̳,   ɾ߿ loop ɾ Ѵ. loop  ecx 
Ϳ  ŭ ݺ۾ ϴµ  ũμƮ CϷ loop   
 찡 κ̴.  ó Ǻб  ؼ ݺ Ѵ. Ȥ ׸? 
׷ٸ  ѵ 𽺾 ڵ带 캸. ׷ 忡  ٸ ʴ. 
(...  ϱ    ϸ Ƹ ݺ ̴. ֳĸ ݺ
 ϴ  ۾ a++;  α׷ 𿡵  ʴ  ڵ̱  
Ϸ  ȭ ϸ鼭 õɰ̴. ¶ ȿ ݺ ؼ Ȯغ.)

  ϸ Ϲ while() for() ٰ ˷ִµ  ڵ带   ׷
 Ȯ   ̴. (ڵ̰ ۾Ƽ? ... ͵ Ʋ ƴ  ߿Ѱ for()
 while() jmp    ϴ°  ִ. Ʊ ߵ jmp   
 ̴.)

3. 

̻ Win32  α׷ֿ  ¸ ĥ Ѵ.  2ȸ ·   
Ҽ Ŷ  ,  C ۼ α׷  · Ǵ  
 Ŷ Ѵ.  ð Ѵ Win32  ó ī ȭ 
ó(SEH) ؼ ٷ  ð ó ٷ ߴ.  API ŷ ϰ Ǹ 
 ó ־ ϴµ   ý DLL ǵ帮 ۾ ſ ɽ ۾̱⶧
   ý ؾ ϴ 찡 Ϻϱ ̴.   ߻ϸ  
 ϰ  ν ٸ α׷鿡   ʾƾ Ѵ. ȭ ó
 ؼ  Hooking Code ۼϴ κп ٽ  ȸ , ׶ ٷ .

ڰ Ұ     Ϻκ̰ų ʰ Ǵ ̶° . Intel 
x86 迭 CPU  Ұ ̿ܿ ڿó Ƽ̵ ó     
ɾ ϸ,     ǻɰ  Ѵ.    ˾
  ʿ ٰ ص, и ڹٳ ̽ĸ ٷ   ƴ  α׷
 ٶ󺸴 ð û ̰ ٰ Ͼ ǽġ ʴ´. 

4. ¿

̹ Ѵ ¿ Windows9x ϴ ̹̽ VxD ؼ ϵ 
ڴ.    ٷ  츮 ʿ κи ϴ    
糪ڴ. Ҿ ȣ ü  Ring0   ̹̽  
ʰ Ring0  Windows ޹(?) ؼ غ. ̹̽    
 ڶ  ºʹ ǽ 󰡴° ſٵ    ̹̽ 
ȯ̶° ̱ ¦ ⶧̴. ϴ VC++  ȯ Ÿ Ѵٸ 
ġ ٸ ãƺ° ̴.  ̴ϸŭ غؾ ͵  ೻
 ü ˾ƺ.

(1) Window 98 DDK(DeviceDriver Development Kit)
: ũμƮ DDK Ȩ(http://www.microsoft.com/ddk/)  Ҽ ִ.  ü DDK
  ϴµ, 츮 ϴ 98 ۾Ұ̹Ƿ 98 DDK ٿεޱ ٶ.

(2) Numega SoftIce
: ¿ ߴ John Robbinson̳ Matt Pietrek ýۿϾ ٹϴ Numega Software
 ϴ ý ̴. Ŀθ ڸ带 Ѵ ϴ   ̸, ũ
Ŀ ʼǰ ֿɸŭ źٴ ũŷ  θ ˷ ִ.  ̰ α׷
̶ε(ݶ ġ ʴ.) ȸʸ  ϵ  ٸ (?) ؼ ϵ  
Ƽ ؿ . (ڿ ޶   ٶ. ڴ  ı , ձ
  ̱⿡... ^^)

(3) ׹ۿ ͼ ؽƮ
:  Ѱ ٸ VC++ ص ȴ. ׸ ⿡  ٸ Ʈе峪 DOS ͸ 
ص ϴ.   Ʈ󿡵͸ ϴµ α׷Ӹ   ߵǾ ִ 
 Ѵ.

<⼳>
ο ߵ е  ̴ּµ.    (ణ ؼ... ^^) 
  ߽ϴ.  亯ص帮  帮. 鿡  亯̳ ׹ۿ 
͵ Ƽ       ѹ øڽϴ. ׷ ٵ 
Ͻð   α׷Ӱ ǽñ... 